home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 061-070 / amok66 / menu / menutest.mod < prev    next >
Text File  |  1993-11-04  |  7KB  |  218 lines

  1. (* ------------------------------------------------------------------------
  2.   :Program.     MenuTest.
  3.   :Contents.    Testprogram, öffnet Screen, Window und Menü.
  4.   :Author.      Klaus Hlawaty.
  5.   :Address.     Waldhof
  6.   :Address.     3579 Schrecksbach
  7.   :History.     v1.0 - 23.Nov.91. ???
  8.   :Imports.     Speed.
  9.   :Imports.     Menu.
  10.   :Imports.     xDisplay.
  11.   :Imports.     xIntui.
  12.   :Imports.     IntuiPointer.
  13.   :Copyright.   PD
  14.   :Language.    Oberon v2.13
  15.   :Translator.  OBERON v2.13 / OLink v2.13d
  16. ------------------------------------------------------------------------ *)
  17. MODULE MenuTest;
  18.  
  19. IMPORT
  20.         c:Conversions,
  21.         D:Display,
  22.        xD:xDisplay,
  23.         e:Exec,
  24.         i:Intuition,
  25.        xi:xIntui,
  26.        ip:IntuiPointer,
  27.         M:Menu,
  28.        ng:Requests,
  29.           NoGuruRq,
  30.         s:SYSTEM;
  31.  
  32. VAR
  33.    MyScreen : D.ScreenPtr;
  34.    MyWindow : M.WinMenuPtr;
  35.  
  36.    class    : LONGSET;
  37.    code     : INTEGER;
  38.    iadr     : s.ADDRESS;
  39.  
  40.    Item     : i.MenuItemPtr;
  41.    Kennung  : INTEGER;
  42.    nMenu,
  43.    nItem,
  44.    nSubI    : INTEGER;
  45.  
  46.    Str      : e.STRING;
  47.    Dummy    : BOOLEAN;
  48.  
  49. BEGIN  (* ------------------- Hauptprogramm --------------------- *)
  50.   NEW(MyScreen);
  51.   ng.Assert(MyScreen#NIL,"Screenspeicher nicht verfügbar");
  52.   NEW(MyWindow);
  53.   ng.Assert(MyWindow#NIL,"Windowspeicher nicht verfügbar");
  54.   MyScreen^.screen := NIL;
  55.   MyWindow^.window := NIL;
  56.   ng.Assert(D.OpenScreen(MyScreen,"TestScreen",
  57.                          0,0,640,256,2,
  58.                          TRUE,FALSE),
  59.                                       "Screen nicht geöffnet");
  60.   xD.WindowFlags := LONGSET{i.backDrop, i.borderless,
  61.                             i.activate};
  62.   ng.Assert(M.OpenWinMenu(MyWindow,"TestWindo",
  63.                           0,0,640,256,
  64.                           MyScreen.screen),
  65.                                            "Window nicht geöffnet");
  66.   i.OldModifyIDCMP(MyWindow.window,LONGSET{i.menuPick});
  67.   ip.Busy(MyWindow.window);
  68. (* ------------- Ende des Open Block ------------ *)
  69. (* ---------------------------------------------------------------------- *)
  70. (* ------------------- Aufbau des Menüs --------------------------------- *)
  71. (* ---------------------------------------------------------------------- *)
  72.   M.AddMenu(MyWindow,"Menü X");
  73.   Item   := M.AddItem(MyWindow
  74.                      ,"Ende"
  75.                      ,"Q"
  76.                      ,0011);
  77.   Item   := M.AddSeparator(MyWindow);
  78.   Item   := M.AddItem(MyWindow
  79.                      ,"Clear"
  80.                      ,"C"
  81.                      ,0012);
  82.   EXCL(Item.flags,i.highComp);          (* Lösche nachträglich Invers   *)
  83.   INCL(Item.flags,i.highBox);           (* Setze nachträglich Umrandung *)
  84.   M.AddMenu(MyWindow,"Menü 2");
  85.   Item   := M.AddItem(MyWindow
  86.                      ,"Item 21"
  87.                      ,"\o"
  88.                      ,0021);
  89.   Item   := M.AddSubSeparator(MyWindow);
  90.   Item   := M.AddTSubI(MyWindow
  91.                       ,"Item 211"
  92.                       ,"Y"
  93.                       ,0211
  94.                       ,TRUE);
  95.   Item   := M.AddTSubI(MyWindow
  96.                       ,"Item 212"
  97.                       ,"X"
  98.                       ,0212
  99.                       ,FALSE);
  100.   M.MutualEx(MyWindow,211 , 212 ,              TRUE);
  101.               (* Item 211 & 212 schließen sich gegenseitig aus *)
  102.   Item   := M.AddTSubI(MyWindow
  103.                       ,"Item 213"
  104.                       ,"Z"
  105.                       ,0213
  106.                       ,FALSE);
  107.   M.MutualEx(MyWindow,211 , 213 ,              TRUE);
  108.               (* Item 211 & 213 schließen sich gegenseitig aus *)
  109.   M.MutualEx(MyWindow,212 , 213 ,              TRUE);
  110.               (* Item 212 & 213 schließen sich gegenseitig aus *)
  111.           (* Alle Item's 211 .. 213 schließen sich gegenseitig aus *)
  112.   Item   := M.AddSubSeparator(MyWindow);
  113.   Item   := M.AddSeparator(MyWindow);
  114.   Item   := M.AddItem(MyWindow
  115.                      ,"Item 22"
  116.                      ,"A"
  117.                      ,0022);
  118.   M.AddMenu(MyWindow,"Menü 3");
  119.   Item   := M.AddItem(MyWindow
  120.                      ,"Item 31"
  121.                      ,"\o"
  122.                      ,0031);
  123.   Item   := M.AddSeparator(MyWindow);
  124.   Item   := M.AddTItem(MyWindow
  125.                       ,"Item 32"
  126.                       ,"\o"
  127.                       ,0032
  128.                       ,FALSE);
  129.   Item   := M.AddSeparator(MyWindow);
  130.   Item   := M.AddItem(MyWindow
  131.                      ,"Item 33"
  132.                      ,"\o"
  133.                      ,0033);
  134.   EXCL(Item.flags,i.itemEnabled);
  135.                  (* Nachträgliche Änderung  *)
  136.                  (* Item nicht mehr wählbar *)
  137.                  (* ======================= *)
  138.  
  139.   M.FmtMenu(MyWindow); (* Formatiert das Menü *)
  140.   M.MenuON(MyWindow);  (* Aktiviert das Menü  *)
  141. (* ---------------------------------------------------------------------- *)
  142. (* ------------------- Abfrage des Menüs -------------------------------- *)
  143. (* ---------------------------------------------------------------------- *)
  144.   ip.Busy(MyWindow.window);
  145.   ip.Normal(MyWindow.window);
  146.   D.ClrHome(MyWindow);
  147.   D.Position(MyWindow,0,2);
  148.   D.CursorOn(MyWindow);
  149.   REPEAT
  150.     ip.Normal(MyWindow.window);
  151.     Item := M.Wait(MyWindow,class,code,iadr);
  152.     WHILE(Item # NIL)DO
  153.       Kennung := Item(M.MItem).Kennung;       (* Item : M.MItemPtr *)
  154.             (* Kennung wird - wegen Multiselect - erst hier geholt *)
  155.       ip.Busy(MyWindow.window);               (* Mouse = ZZZ       *)
  156.       (* ----------------------------- Textausgabe und Itemnummern *)
  157.       D.Write(MyWindow,"Intuition : MenuNr.");
  158.       xi.decodeMenu(code,nMenu,nItem,nSubI);
  159.       Dummy := c.IntToString(nMenu,Str,3);
  160.       D.Write(MyWindow,Str);
  161.       D.Write(MyWindow,"| ItemNr.");
  162.       Dummy := c.IntToString(nItem,Str,3);
  163.       D.Write(MyWindow,Str);
  164.       D.Write(MyWindow,"| SubItemNr.");
  165.       Dummy := c.IntToString(nSubI,Str,3);
  166.       D.Write(MyWindow,Str);
  167.       D.Write(MyWindow,"# Kennung:");
  168.       Dummy := c.IntToString(Kennung,Str,3);
  169.       D.Write(MyWindow,Str);
  170.       D.Write(MyWindow,". ");
  171.       (* -------------------- Bei Toggel-Item's Ausgabe von ON/OFF *)
  172.       IF(i.checkIt IN Item.flags)THEN
  173.         IF(i.checked IN Item.flags)THEN
  174.           D.Write(MyWindow," ON ");
  175.           IF(Kennung = 32)THEN
  176.             M.ItemON(MyWindow,33);       (* Anschalten von Item 33 *)
  177.           END;
  178.         ELSE
  179.           D.Write(MyWindow," OFF");
  180.           IF(Kennung = 32)THEN
  181.             M.ItemOFF(MyWindow,33);      (* Abschalten von Item 33 *)
  182.           END;
  183.         END (* IF checked *);
  184.       END (* IF checkit *);
  185.       D.WriteLn(MyWindow);
  186.       (* ----------------------------------------- Item 12 = Clear *)
  187.       IF(Kennung = 12)THEN
  188.         D.ClrHome(MyWindow);
  189.         D.Position(MyWindow,0,2);
  190.         D.CursorOn(MyWindow);
  191.       END;
  192.       (* ------------------------------ Hole nächstes Item bei MultiSelect *)
  193.       Item := M.ItemAdr(MyWindow,Item.nextSelect); (* Item : i.MenuItemPtr *)
  194.     END (* WHILE *);
  195.     IF(i.windowSizing IN class)THEN
  196.       D.Init(MyWindow);
  197.     END (* IF windowSizing *);
  198.   UNTIL(i.closeWindow IN class)OR(Kennung = 11); (* Item 11 = Ende *)
  199.  
  200. (* ------------- Begin des Endes ---------------- *)
  201. CLOSE
  202.   ip.Normal(MyWindow.window);
  203.   IF(MyWindow^.window # NIL)THEN
  204.     M.MenuOFF(MyWindow);
  205.     M.Close(MyWindow);
  206.   END;
  207.   IF(MyScreen^.screen # NIL)THEN
  208.      M.Close(MyScreen);
  209.   END;
  210.  
  211.   IF(MyScreen # NIL)THEN
  212.      DISPOSE(MyScreen);
  213.   END;
  214.   IF(MyWindow # NIL)THEN
  215.      DISPOSE(MyWindow);
  216.   END;
  217. END MenuTest.
  218.